#loading the necessary packages
library(tidyverse)
library(janitor)
library(readxl)
library(here)
#loading the data
candy_2015 <- read_excel("../raw_data/boing-boing-candy-2015.xlsx") %>% 
  clean_names()
candy_2016 <- read_excel("../raw_data/boing-boing-candy-2016.xlsx") %>% 
  clean_names()
candy_2017 <- read_excel("../raw_data/boing-boing-candy-2017.xlsx") %>% 
  clean_names()
New names:
candy_2016
candy_2015
candy_2017

#order of operations: #decide which variables to keep for the analysis according to business questions # Pivot data the same for all 3 datasets # perform pivot on all three # Investigate other columns

#only keeping variables useful for analysis from 2015 dataset #The variables are a bit confusing. I will only keep variables that are actual food and drop anything which is not food.

candy_2015 <- candy_2015 %>% 
  select(-c(
    cash_or_other_forms_of_legal_tender, 
    creepy_religious_comics_chick_tracts, 
    hugs_actual_physical_hugs, 
    please_leave_any_remarks_or_comments_regarding_your_choices: 
    please_estimate_the_degrees_of_separation_you_have_from_the_following_folks_beyonce_knowles, 
    dental_paraphenalia, 
    generic_brand_acetaminophen, 
    peterson_brand_sidewalk_chalk
))
candy_2015

#time to rename some columns. Maybe not that necessary but I would like to have my final results with neat names.

candy_2015 <- candy_2015 %>% 
  rename("trick_or_treat" = are_you_going_actually_going_trick_or_treating_yourself,
         "grand_bar" = x100_grand_bar, 
         "brown_globs" = anonymous_brown_globs_that_come_in_black_and_orange_wrappers, 
         "any_candy_bar" = any_full_sized_candy_bar, 
         "brach_without_candy_corn" = brach_products_not_including_candy_corn, 
         "high_fructose_corn_syrup" = vials_of_pure_high_fructose_corn_syrup_for_main_lining_into_your_vein, 
         "restaurant_candy" = candy_that_is_clearly_just_the_stuff_given_out_for_free_at_restaurants, 
         "chick_o_sticks"  = chick_o_sticks_we_don_t_know_what_that_is, 
         "old_marshmallow" = those_odd_marshmallow_circus_peanut_things)
candy_2015

#same thing for the 2016 dataset

#selecting only the necessary columns for final analysis
candy_2016 <- candy_2016 %>% 
  select(-c(cash_or_other_forms_of_legal_tender, 
            creepy_religious_comics_chick_tracts, 
            dental_paraphenalia, 
            generic_brand_acetaminophen, 
            hugs_actual_physical_hugs, 
            person_of_interest_season_3_dvd_box_set_not_including_disc_4_with_hilarious_outtakes, 
            sourpatch_kids_i_e_abominations_of_nature, 
            vials_of_pure_high_fructose_corn_syrup_for_main_lining_into_your_vein, 
            please_list_any_items_not_included_above_that_give_you_joy:
              york_peppermint_patties_ignore))
candy_2016
candy_2016 <- candy_2016 %>% 
  rename("trick_or_treat" = are_you_going_actually_going_trick_or_treating_yourself, 
         "gender" = your_gender, 
         "age" = how_old_are_you, 
         "country" = which_country_do_you_live_in, 
         "state_province" = which_state_province_county_do_you_live_in, 
         "grand_bar" = x100_grand_bar, 
         "brown_globs" = anonymous_brown_globs_that_come_in_black_and_orange_wrappers, 
         )
candy_2016

#candy 2017

candy_2017 <- candy_2017 %>% 
  select(-c(q7_joy_other : click_coordinates_x_y))
candy_2017

#clean column: removing the q+numnber_ before variable name

candy_2017 <- candy_2017 %>% 
  rename_with(~ str_remove(., pattern = "q[0-90-9]+_"))
candy_2017

#pivot longer all the datasets

library(tidyr)
#2015
candy_2015 <- candy_2015 %>% 
  pivot_longer("butterfinger":"york_peppermint_patties",
names_to = "candy_type", 
values_to = "rating")
candy_2015
#2016
candy_2016 <- candy_2016 %>% 
  pivot_longer("grand_bar":"york_peppermint_patties",
names_to = "candy_type", 
values_to = "rating")
candy_2016
#2017
candy_2017 <- candy_2017 %>% 
  pivot_longer("100_grand_bar":"york_peppermint_patties",
names_to = "candy_type", 
values_to = "rating")
candy_2017
#binding all the datasets
bind_rows(candy_2015, 
          candy_2016, 
          candy_2017, 
          .id = "year")

#sort out age column and country column

#binding the 3 datasets
candy <- bind_rows(candy_2015, 
                            candy_2016, 
                            candy_2017, 
                   .id = id)
candy

#let’s clean once again candy_type

candy <- candy %>% 
  mutate(candy_type = recode(candy_type,
                              "anonymous_brown_globs_that_come_in_black_and_orange_wrappers_a_k_a_mary_janes" = "mary_janes"),
  candy_type = recode(candy_type,"bonkers_the_candy" = "bonkers"),
  candy_type = recode(candy_type,"boxo_raisins" = "box_o_raisins"),
  candy_type = recode(candy_type,"licorice_yes_black" = "licorice"),
  candy_type = recode(candy_type,"sweetums_a_friend_to_diabetes" = "sweetums"))
  candy

#country column

candy <- candy %>% 
  mutate(country = if_else(grepl("(?i)usa+", country),"USA",country)) %>% 
  mutate(country = if_else(grepl("(?i)united s+", country),"USA",country)) %>% 
  mutate(country = if_else(grepl("(?i)amer", country),"USA",country)) %>% 
  mutate(country = if_else(grepl("(?i)stat", country),"USA",country)) %>% 
  mutate(country = if_else(grepl("(?i)subscribe+.*", country),NA_character_,country)) 

#make vectors of USA outliers and some to change to NA values
usa_outliers = c("Alaska", "California", "EUA", "Merica", "Murica", "murrika",
                 "New Jersey", "New York", "North Carolina", "Pittsburgh", 
                 "The Yoo Ess of Aaayyyyyy", "Trumpistan", "U S", "u s a", "u.s.",
                 "U.s.", "U.S.", "u.s.a.", "U.S.A.", "UD", "us", "Us", "US", "US of A",
                 "USSA", "'merica")
change_to_NA = c(1, 30.0, 32, 35, 44.0, 45, 45.0, 46, 47.0, 51.0, 54.0)
change_to_NA2 = c("30.0", "44.0", "45.0", "47.0", "51.0", "54.0")
others = c(
  "A tropical island south of the equator", "A", "Atlantis",
  "Canae", "cascadia ", "Cascadia", "Denial", "Earth", "Fear and Loathing", 
  "god's country", "I don't know anymore", "insanity lately", 
  "there isn't one for old men", "soviet canuckistan", "Narnia", "Neverland",
  "one of the best ones", "See above", "Somewhere", 
  "Subscribe To Dm4uz3 On Youtube", "The republic of Cascadia", "this one", 
  "Europe", " Cascadia", "Cascadia ")
candy
candy <- candy %>%
mutate(country = if_else(country %in% usa_outliers ,
                         "USA", country)) %>% 
  mutate(country = if_else(country %in% others|
                             country %in% change_to_NA|
                             country %in% change_to_NA2, 
                           NA_character_, country)) %>% 
  mutate(country = str_to_title(country)) 
candy
candy <- candy %>%
mutate(country = recode(country, "The Netherlands" = "Netherlands"),
       country = recode(country, "Can" = "Canada"),
       country = recode(country, "Canada`" = "Canada"),
       country = recode(country, "Endland" = "United Kingdom"),
       country = recode(country, "England" = "United Kingdom"),
       country = recode(country, "England" = "United Kingdom"),
       country = recode(country, "Scotland" = "United Kingdom"),
       country = recode(country, "España" = "Spain"),
       country = recode(country, "U.k." = "United Kingdom"),
       country = recode(country, "Uk" = "United Kingdom"),
       country = recode(country, "United Kindom" = "United Kingdom"))
candy

#age column

candy <- candy %>% 
  mutate(age = as.numeric(age)) %>% 
  count(age) %>% 
  mutate(age = ifelse(age>122, NA, age))
Warning: NAs introduced by coercion
candy

#write data to CSV

candy %>% 
  write_csv("../clean_data/candy_clean.csv")
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCiNsb2FkaW5nIHRoZSBuZWNlc3NhcnkgcGFja2FnZXMNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGhlcmUpDQpgYGANCg0KYGBge3J9DQojbG9hZGluZyB0aGUgZGF0YQ0KY2FuZHlfMjAxNSA8LSByZWFkX2V4Y2VsKCIuLi9yYXdfZGF0YS9ib2luZy1ib2luZy1jYW5keS0yMDE1Lnhsc3giKSAlPiUgDQogIGNsZWFuX25hbWVzKCkNCmNhbmR5XzIwMTYgPC0gcmVhZF9leGNlbCgiLi4vcmF3X2RhdGEvYm9pbmctYm9pbmctY2FuZHktMjAxNi54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQpjYW5keV8yMDE3IDwtIHJlYWRfZXhjZWwoIi4uL3Jhd19kYXRhL2JvaW5nLWJvaW5nLWNhbmR5LTIwMTcueGxzeCIpICU+JSANCiAgY2xlYW5fbmFtZXMoKQ0KYGBgDQoNCmBgYHtyfQ0KY2FuZHlfMjAxNg0KY2FuZHlfMjAxNQ0KY2FuZHlfMjAxNw0KYGBgDQoNCg0KI29yZGVyIG9mIG9wZXJhdGlvbnM6IA0KI2RlY2lkZSB3aGljaCB2YXJpYWJsZXMgdG8ga2VlcCBmb3IgdGhlIGFuYWx5c2lzIGFjY29yZGluZyB0byBidXNpbmVzcyBxdWVzdGlvbnMNCiMgUGl2b3QgZGF0YSB0aGUgc2FtZSBmb3IgYWxsIDMgZGF0YXNldHMNCiMgcGVyZm9ybSBwaXZvdCBvbiBhbGwgdGhyZWUNCiMgSW52ZXN0aWdhdGUgb3RoZXIgY29sdW1ucw0KDQoNCiNvbmx5IGtlZXBpbmcgdmFyaWFibGVzIHVzZWZ1bCBmb3IgYW5hbHlzaXMgZnJvbSAyMDE1IGRhdGFzZXQNCiNUaGUgdmFyaWFibGVzIGFyZSBhIGJpdCBjb25mdXNpbmcuIEkgd2lsbCBvbmx5IGtlZXAgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbCBmb29kIGFuZCBkcm9wIGFueXRoaW5nIHdoaWNoIGlzIG5vdCBmb29kLiAgDQpgYGB7cn0NCmNhbmR5XzIwMTUgPC0gY2FuZHlfMjAxNSAlPiUgDQogIHNlbGVjdCgtYygNCiAgICBjYXNoX29yX290aGVyX2Zvcm1zX29mX2xlZ2FsX3RlbmRlciwgDQogICAgY3JlZXB5X3JlbGlnaW91c19jb21pY3NfY2hpY2tfdHJhY3RzLCANCiAgICBodWdzX2FjdHVhbF9waHlzaWNhbF9odWdzLCANCiAgICBwbGVhc2VfbGVhdmVfYW55X3JlbWFya3Nfb3JfY29tbWVudHNfcmVnYXJkaW5nX3lvdXJfY2hvaWNlczogDQogICAgcGxlYXNlX2VzdGltYXRlX3RoZV9kZWdyZWVzX29mX3NlcGFyYXRpb25feW91X2hhdmVfZnJvbV90aGVfZm9sbG93aW5nX2ZvbGtzX2JleW9uY2Vfa25vd2xlcywgDQogICAgZGVudGFsX3BhcmFwaGVuYWxpYSwgDQogICAgZ2VuZXJpY19icmFuZF9hY2V0YW1pbm9waGVuLCANCiAgICBwZXRlcnNvbl9icmFuZF9zaWRld2Fsa19jaGFsaw0KKSkNCmNhbmR5XzIwMTUNCmBgYA0KI3RpbWUgdG8gcmVuYW1lIHNvbWUgY29sdW1ucy4gTWF5YmUgbm90IHRoYXQgbmVjZXNzYXJ5IGJ1dCBJIHdvdWxkIGxpa2UgdG8gaGF2ZSBteSBmaW5hbCByZXN1bHRzIHdpdGggbmVhdCBuYW1lcy4gDQoNCmBgYHtyfQ0KY2FuZHlfMjAxNSA8LSBjYW5keV8yMDE1ICU+JSANCiAgcmVuYW1lKCJ0cmlja19vcl90cmVhdCIgPSBhcmVfeW91X2dvaW5nX2FjdHVhbGx5X2dvaW5nX3RyaWNrX29yX3RyZWF0aW5nX3lvdXJzZWxmLA0KICAgICAgICAgImdyYW5kX2JhciIgPSB4MTAwX2dyYW5kX2JhciwgDQogICAgICAgICAiYnJvd25fZ2xvYnMiID0gYW5vbnltb3VzX2Jyb3duX2dsb2JzX3RoYXRfY29tZV9pbl9ibGFja19hbmRfb3JhbmdlX3dyYXBwZXJzLCANCiAgICAgICAgICJhbnlfY2FuZHlfYmFyIiA9IGFueV9mdWxsX3NpemVkX2NhbmR5X2JhciwgDQogICAgICAgICAiYnJhY2hfd2l0aG91dF9jYW5keV9jb3JuIiA9IGJyYWNoX3Byb2R1Y3RzX25vdF9pbmNsdWRpbmdfY2FuZHlfY29ybiwgDQogICAgICAgICAiaGlnaF9mcnVjdG9zZV9jb3JuX3N5cnVwIiA9IHZpYWxzX29mX3B1cmVfaGlnaF9mcnVjdG9zZV9jb3JuX3N5cnVwX2Zvcl9tYWluX2xpbmluZ19pbnRvX3lvdXJfdmVpbiwgDQogICAgICAgICAicmVzdGF1cmFudF9jYW5keSIgPSBjYW5keV90aGF0X2lzX2NsZWFybHlfanVzdF90aGVfc3R1ZmZfZ2l2ZW5fb3V0X2Zvcl9mcmVlX2F0X3Jlc3RhdXJhbnRzLCANCiAgICAgICAgICJjaGlja19vX3N0aWNrcyIgID0gY2hpY2tfb19zdGlja3Nfd2VfZG9uX3Rfa25vd193aGF0X3RoYXRfaXMsIA0KICAgICAgICAgIm9sZF9tYXJzaG1hbGxvdyIgPSB0aG9zZV9vZGRfbWFyc2htYWxsb3dfY2lyY3VzX3BlYW51dF90aGluZ3MpDQpjYW5keV8yMDE1DQpgYGANCiNzYW1lIHRoaW5nIGZvciB0aGUgMjAxNiBkYXRhc2V0IA0KYGBge3J9DQojc2VsZWN0aW5nIG9ubHkgdGhlIG5lY2Vzc2FyeSBjb2x1bW5zIGZvciBmaW5hbCBhbmFseXNpcw0KY2FuZHlfMjAxNiA8LSBjYW5keV8yMDE2ICU+JSANCiAgc2VsZWN0KC1jKGNhc2hfb3Jfb3RoZXJfZm9ybXNfb2ZfbGVnYWxfdGVuZGVyLCANCiAgICAgICAgICAgIGNyZWVweV9yZWxpZ2lvdXNfY29taWNzX2NoaWNrX3RyYWN0cywgDQogICAgICAgICAgICBkZW50YWxfcGFyYXBoZW5hbGlhLCANCiAgICAgICAgICAgIGdlbmVyaWNfYnJhbmRfYWNldGFtaW5vcGhlbiwgDQogICAgICAgICAgICBodWdzX2FjdHVhbF9waHlzaWNhbF9odWdzLCANCiAgICAgICAgICAgIHBlcnNvbl9vZl9pbnRlcmVzdF9zZWFzb25fM19kdmRfYm94X3NldF9ub3RfaW5jbHVkaW5nX2Rpc2NfNF93aXRoX2hpbGFyaW91c19vdXR0YWtlcywgDQogICAgICAgICAgICBzb3VycGF0Y2hfa2lkc19pX2VfYWJvbWluYXRpb25zX29mX25hdHVyZSwgDQogICAgICAgICAgICB2aWFsc19vZl9wdXJlX2hpZ2hfZnJ1Y3Rvc2VfY29ybl9zeXJ1cF9mb3JfbWFpbl9saW5pbmdfaW50b195b3VyX3ZlaW4sIA0KICAgICAgICAgICAgcGxlYXNlX2xpc3RfYW55X2l0ZW1zX25vdF9pbmNsdWRlZF9hYm92ZV90aGF0X2dpdmVfeW91X2pveToNCiAgICAgICAgICAgICAgeW9ya19wZXBwZXJtaW50X3BhdHRpZXNfaWdub3JlKSkNCmNhbmR5XzIwMTYNCmBgYA0KDQpgYGB7cn0NCmNhbmR5XzIwMTYgPC0gY2FuZHlfMjAxNiAlPiUgDQogIHJlbmFtZSgidHJpY2tfb3JfdHJlYXQiID0gYXJlX3lvdV9nb2luZ19hY3R1YWxseV9nb2luZ190cmlja19vcl90cmVhdGluZ195b3Vyc2VsZiwgDQogICAgICAgICAiZ2VuZGVyIiA9IHlvdXJfZ2VuZGVyLCANCiAgICAgICAgICJhZ2UiID0gaG93X29sZF9hcmVfeW91LCANCiAgICAgICAgICJjb3VudHJ5IiA9IHdoaWNoX2NvdW50cnlfZG9feW91X2xpdmVfaW4sIA0KICAgICAgICAgInN0YXRlX3Byb3ZpbmNlIiA9IHdoaWNoX3N0YXRlX3Byb3ZpbmNlX2NvdW50eV9kb195b3VfbGl2ZV9pbiwgDQogICAgICAgICAiZ3JhbmRfYmFyIiA9IHgxMDBfZ3JhbmRfYmFyLCANCiAgICAgICAgICJicm93bl9nbG9icyIgPSBhbm9ueW1vdXNfYnJvd25fZ2xvYnNfdGhhdF9jb21lX2luX2JsYWNrX2FuZF9vcmFuZ2Vfd3JhcHBlcnMsIA0KICAgICAgICAgKQ0KY2FuZHlfMjAxNg0KYGBgDQojY2FuZHkgMjAxNw0KDQpgYGB7cn0NCmNhbmR5XzIwMTcgPC0gY2FuZHlfMjAxNyAlPiUgDQogIHNlbGVjdCgtYyhxN19qb3lfb3RoZXIgOiBjbGlja19jb29yZGluYXRlc194X3kpKQ0KY2FuZHlfMjAxNw0KYGBgDQojY2xlYW4gY29sdW1uOiByZW1vdmluZyB0aGUgcStudW1uYmVyXyBiZWZvcmUgdmFyaWFibGUgbmFtZSANCg0KYGBge3J9DQpjYW5keV8yMDE3IDwtIGNhbmR5XzIwMTcgJT4lIA0KICByZW5hbWVfd2l0aCh+IHN0cl9yZW1vdmUoLiwgcGF0dGVybiA9ICJxWzAtOTAtOV0rXyIpKQ0KY2FuZHlfMjAxNw0KYGBgDQoNCiNwaXZvdCBsb25nZXIgYWxsIHRoZSBkYXRhc2V0cw0KYGBge3J9DQpsaWJyYXJ5KHRpZHlyKQ0KYGBgDQpgYGB7cn0NCiMyMDE1DQpjYW5keV8yMDE1IDwtIGNhbmR5XzIwMTUgJT4lIA0KICBwaXZvdF9sb25nZXIoImJ1dHRlcmZpbmdlciI6InlvcmtfcGVwcGVybWludF9wYXR0aWVzIiwNCm5hbWVzX3RvID0gImNhbmR5X3R5cGUiLCANCnZhbHVlc190byA9ICJyYXRpbmciKQ0KY2FuZHlfMjAxNQ0KYGBgDQpgYGB7cn0NCiMyMDE2DQpjYW5keV8yMDE2IDwtIGNhbmR5XzIwMTYgJT4lIA0KICBwaXZvdF9sb25nZXIoImdyYW5kX2JhciI6InlvcmtfcGVwcGVybWludF9wYXR0aWVzIiwNCm5hbWVzX3RvID0gImNhbmR5X3R5cGUiLCANCnZhbHVlc190byA9ICJyYXRpbmciKQ0KY2FuZHlfMjAxNg0KYGBgDQoNCg0KYGBge3J9DQojMjAxNw0KY2FuZHlfMjAxNyA8LSBjYW5keV8yMDE3ICU+JSANCiAgcGl2b3RfbG9uZ2VyKCIxMDBfZ3JhbmRfYmFyIjoieW9ya19wZXBwZXJtaW50X3BhdHRpZXMiLA0KbmFtZXNfdG8gPSAiY2FuZHlfdHlwZSIsIA0KdmFsdWVzX3RvID0gInJhdGluZyIpDQpjYW5keV8yMDE3DQpgYGANCmBgYHtyfQ0KI2JpbmRpbmcgYWxsIHRoZSBkYXRhc2V0cw0KYmluZF9yb3dzKGNhbmR5XzIwMTUsIA0KICAgICAgICAgIGNhbmR5XzIwMTYsIA0KICAgICAgICAgIGNhbmR5XzIwMTcsIA0KICAgICAgICAgIC5pZCA9ICJ5ZWFyIikNCmBgYA0KDQoNCiNzb3J0IG91dCBhZ2UgY29sdW1uIGFuZCBjb3VudHJ5IGNvbHVtbiANCg0KYGBge3J9DQojYmluZGluZyByb3dzLCBzbyBtYWtpbmcgc3VyZSBhbGwgdGhlIHZhcmlhYmxlIGhhdmUgdGhlIHNhbWUgbmFtZSANCmNhbmR5XzIwMTUgPC0gY2FuZHlfMjAxNSAlPiUgDQogIHJlbmFtZShhZ2UgPSAiaG93X29sZF9hcmVfeW91IikNCmNhbmR5XzIwMTUNCmNhbmR5XzIwMTcgPC0gY2FuZHlfMjAxNyAlPiUgDQogIHJlbmFtZSh0cmlja19vcl90cmVhdCA9ICJnb2luZ19vdXQiKQ0KY2FuZHlfMjAxNw0KYGBgDQoNCmBgYHtyfQ0KI2JpbmRpbmcgdGhlIDMgZGF0YXNldHMNCmNhbmR5IDwtIGJpbmRfcm93cyhjYW5keV8yMDE1LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5keV8yMDE2LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5keV8yMDE3LCANCiAgICAgICAgICAgICAgICAgICAuaWQgPSBpZCkNCmNhbmR5DQpgYGANCg0KI2xldCdzIGNsZWFuIG9uY2UgYWdhaW4gY2FuZHlfdHlwZSANCmBgYHtyfQ0KY2FuZHkgPC0gY2FuZHkgJT4lIA0KICBtdXRhdGUoY2FuZHlfdHlwZSA9IHJlY29kZShjYW5keV90eXBlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVyc19hX2tfYV9tYXJ5X2phbmVzIiA9ICJtYXJ5X2phbmVzIiksDQogIGNhbmR5X3R5cGUgPSByZWNvZGUoY2FuZHlfdHlwZSwiYm9ua2Vyc190aGVfY2FuZHkiID0gImJvbmtlcnMiKSwNCiAgY2FuZHlfdHlwZSA9IHJlY29kZShjYW5keV90eXBlLCJib3hvX3JhaXNpbnMiID0gImJveF9vX3JhaXNpbnMiKSwNCiAgY2FuZHlfdHlwZSA9IHJlY29kZShjYW5keV90eXBlLCJsaWNvcmljZV95ZXNfYmxhY2siID0gImxpY29yaWNlIiksDQogIGNhbmR5X3R5cGUgPSByZWNvZGUoY2FuZHlfdHlwZSwic3dlZXR1bXNfYV9mcmllbmRfdG9fZGlhYmV0ZXMiID0gInN3ZWV0dW1zIikpDQogIGNhbmR5DQpgYGANCiNjb3VudHJ5IGNvbHVtbg0KDQpgYGB7cn0NCmNhbmR5IDwtIGNhbmR5ICU+JSANCiAgbXV0YXRlKGNvdW50cnkgPSBpZl9lbHNlKGdyZXBsKCIoP2kpdXNhKyIsIGNvdW50cnkpLCJVU0EiLGNvdW50cnkpKSAlPiUgDQogIG11dGF0ZShjb3VudHJ5ID0gaWZfZWxzZShncmVwbCgiKD9pKXVuaXRlZCBzKyIsIGNvdW50cnkpLCJVU0EiLGNvdW50cnkpKSAlPiUgDQogIG11dGF0ZShjb3VudHJ5ID0gaWZfZWxzZShncmVwbCgiKD9pKWFtZXIiLCBjb3VudHJ5KSwiVVNBIixjb3VudHJ5KSkgJT4lIA0KICBtdXRhdGUoY291bnRyeSA9IGlmX2Vsc2UoZ3JlcGwoIig/aSlzdGF0IiwgY291bnRyeSksIlVTQSIsY291bnRyeSkpICU+JSANCiAgbXV0YXRlKGNvdW50cnkgPSBpZl9lbHNlKGdyZXBsKCIoP2kpc3Vic2NyaWJlKy4qIiwgY291bnRyeSksTkFfY2hhcmFjdGVyXyxjb3VudHJ5KSkgDQoNCiNtYWtlIHZlY3RvcnMgb2YgVVNBIG91dGxpZXJzIGFuZCBzb21lIHRvIGNoYW5nZSB0byBOQSB2YWx1ZXMNCnVzYV9vdXRsaWVycyA9IGMoIkFsYXNrYSIsICJDYWxpZm9ybmlhIiwgIkVVQSIsICJNZXJpY2EiLCAiTXVyaWNhIiwgIm11cnJpa2EiLA0KICAgICAgICAgICAgICAgICAiTmV3IEplcnNleSIsICJOZXcgWW9yayIsICJOb3J0aCBDYXJvbGluYSIsICJQaXR0c2J1cmdoIiwgDQogICAgICAgICAgICAgICAgICJUaGUgWW9vIEVzcyBvZiBBYWF5eXl5eXkiLCAiVHJ1bXBpc3RhbiIsICJVIFMiLCAidSBzIGEiLCAidS5zLiIsDQogICAgICAgICAgICAgICAgICJVLnMuIiwgIlUuUy4iLCAidS5zLmEuIiwgIlUuUy5BLiIsICJVRCIsICJ1cyIsICJVcyIsICJVUyIsICJVUyBvZiBBIiwNCiAgICAgICAgICAgICAgICAgIlVTU0EiLCAiJ21lcmljYSIpDQpjaGFuZ2VfdG9fTkEgPSBjKDEsIDMwLjAsIDMyLCAzNSwgNDQuMCwgNDUsIDQ1LjAsIDQ2LCA0Ny4wLCA1MS4wLCA1NC4wKQ0KY2hhbmdlX3RvX05BMiA9IGMoIjMwLjAiLCAiNDQuMCIsICI0NS4wIiwgIjQ3LjAiLCAiNTEuMCIsICI1NC4wIikNCm90aGVycyA9IGMoDQogICJBIHRyb3BpY2FsIGlzbGFuZCBzb3V0aCBvZiB0aGUgZXF1YXRvciIsICJBIiwgIkF0bGFudGlzIiwNCiAgIkNhbmFlIiwgImNhc2NhZGlhICIsICJDYXNjYWRpYSIsICJEZW5pYWwiLCAiRWFydGgiLCAiRmVhciBhbmQgTG9hdGhpbmciLCANCiAgImdvZCdzIGNvdW50cnkiLCAiSSBkb24ndCBrbm93IGFueW1vcmUiLCAiaW5zYW5pdHkgbGF0ZWx5IiwgDQogICJ0aGVyZSBpc24ndCBvbmUgZm9yIG9sZCBtZW4iLCAic292aWV0IGNhbnVja2lzdGFuIiwgIk5hcm5pYSIsICJOZXZlcmxhbmQiLA0KICAib25lIG9mIHRoZSBiZXN0IG9uZXMiLCAiU2VlIGFib3ZlIiwgIlNvbWV3aGVyZSIsIA0KICAiU3Vic2NyaWJlIFRvIERtNHV6MyBPbiBZb3V0dWJlIiwgIlRoZSByZXB1YmxpYyBvZiBDYXNjYWRpYSIsICJ0aGlzIG9uZSIsIA0KICAiRXVyb3BlIiwgIiBDYXNjYWRpYSIsICJDYXNjYWRpYSAiKQ0KY2FuZHkNCmBgYA0KDQpgYGB7cn0NCmNhbmR5IDwtIGNhbmR5ICU+JQ0KbXV0YXRlKGNvdW50cnkgPSBpZl9lbHNlKGNvdW50cnkgJWluJSB1c2Ffb3V0bGllcnMgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICJVU0EiLCBjb3VudHJ5KSkgJT4lIA0KICBtdXRhdGUoY291bnRyeSA9IGlmX2Vsc2UoY291bnRyeSAlaW4lIG90aGVyc3wNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeSAlaW4lIGNoYW5nZV90b19OQXwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeSAlaW4lIGNoYW5nZV90b19OQTIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFfY2hhcmFjdGVyXywgY291bnRyeSkpICU+JSANCiAgbXV0YXRlKGNvdW50cnkgPSBzdHJfdG9fdGl0bGUoY291bnRyeSkpIA0KY2FuZHkNCmBgYA0KYGBge3J9DQpjYW5keSA8LSBjYW5keSAlPiUNCm11dGF0ZShjb3VudHJ5ID0gcmVjb2RlKGNvdW50cnksICJUaGUgTmV0aGVybGFuZHMiID0gIk5ldGhlcmxhbmRzIiksDQogICAgICAgY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAiQ2FuIiA9ICJDYW5hZGEiKSwNCiAgICAgICBjb3VudHJ5ID0gcmVjb2RlKGNvdW50cnksICJDYW5hZGFgIiA9ICJDYW5hZGEiKSwNCiAgICAgICBjb3VudHJ5ID0gcmVjb2RlKGNvdW50cnksICJFbmRsYW5kIiA9ICJVbml0ZWQgS2luZ2RvbSIpLA0KICAgICAgIGNvdW50cnkgPSByZWNvZGUoY291bnRyeSwgIkVuZ2xhbmQiID0gIlVuaXRlZCBLaW5nZG9tIiksDQogICAgICAgY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAiRW5nbGFuZCIgPSAiVW5pdGVkIEtpbmdkb20iKSwNCiAgICAgICBjb3VudHJ5ID0gcmVjb2RlKGNvdW50cnksICJTY290bGFuZCIgPSAiVW5pdGVkIEtpbmdkb20iKSwNCiAgICAgICBjb3VudHJ5ID0gcmVjb2RlKGNvdW50cnksICJFc3Bhw7FhIiA9ICJTcGFpbiIpLA0KICAgICAgIGNvdW50cnkgPSByZWNvZGUoY291bnRyeSwgIlUuay4iID0gIlVuaXRlZCBLaW5nZG9tIiksDQogICAgICAgY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAiVWsiID0gIlVuaXRlZCBLaW5nZG9tIiksDQogICAgICAgY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAiVW5pdGVkIEtpbmRvbSIgPSAiVW5pdGVkIEtpbmdkb20iKSkNCmNhbmR5DQpgYGANCiNhZ2UgY29sdW1uDQoNCmBgYHtyfQ0KY2FuZHkgPC0gY2FuZHkgJT4lIA0KICBtdXRhdGUoYWdlID0gYXMubnVtZXJpYyhhZ2UpKSAlPiUgDQogIGNvdW50KGFnZSkgJT4lIA0KICBtdXRhdGUoYWdlID0gaWZlbHNlKGFnZT4xMjIsIE5BLCBhZ2UpKQ0KY2FuZHkNCmBgYA0KDQojd3JpdGUgZGF0YSB0byBDU1YNCg0KYGBge3J9DQpjYW5keSAlPiUgDQogIHdyaXRlX2NzdigiLi4vY2xlYW5fZGF0YS9jYW5keV9jbGVhbi5jc3YiKQ0KYGBgDQoNCg==